#ifndef __AHUPID_H__
#define __AHUPID_H__

#include "pid.h"

#define OAD_MIN     (0.0)   // 风阀最小开度
#define OAD_MAX     (100.0) // 风阀最大开度

#define VLV_MIN   (0.0)     // 水阀最小开度
#define VLV_MAX   (100.0)   // 水阀最大开度

#define PID_TEMP_P	(2.0)	// 1.67-5
#define PID_TEMP_I	(300)	// 180-600
#define PID_TEMP_D	(30)	// 18-60

#define PID_HMDT_P	(2.0)	// 1.67-5
#define PID_HMDT_I	(300)	// 180-600
#define PID_HMDT_D	(30)	// 18-60

typedef struct _ahupid_t{
	Pid pid;
	double *in;
	double *out;
	double *set;
	long itvl_sec;      // 两次pid计算间的累计时间(s)，
}ahupid_t;

/* 温度、湿度、CO2的pid描述符集合 */
typedef struct _ahupid_set_t{
	// 温度
	ahupid_t temp;
	bool	 flag_temp;		// true: 温控使用pid控制
	int		 season;		// 保存WS_EX点位的value
	bool	 ws_ex_done;	// 当季节切换到过渡季后，调整完一次阀就设置true,防止不停的发送点位
	bool	 changed;		// 冬夏季节转换标志, true：WS_EX点位发生变化

	// 湿度
	ahupid_t hmdt;
	bool	 flag_hmdt;		// true: 湿控使用pid控制

	// CO2
	ahupid_t co2;
	bool	 flag_co2;		// true: co2控使用pid控制
}ahupid_set_t;

void *ahu_hmdt_ctl_thread(void *arg);
void *ahu_temp_ctl_thread(void *arg);
void *ahu_rt_update_thread(void *arg);

#endif  // __AHUPID_H__